一般に言われる「Nested Virtualization」とは仮想マシンの中でハイパバイザ(Hypervisor)を実行可能とする機能を指します。
Nested Virtualizationをサポートするプラットフォームとしては今回取り上げるKVMの他にVMware ESX(i), Xen, Microsoft Hyper-Vがあります。
※個別には、Nested KVM, Nested ESXi, Nested Xen, Nested Hyper-Vとも呼ばれます。
「Nested Virtualization」の環境では最低限3個のレイヤが連携して動くことが必要となります。
yum install ftp yum groupinstall "Virtualization Host" ※KVM関連パッケージのインストール yum install centos-release-xen yum update yum install xen grub-bootxen.sh ※ブートメニューでXenブートをデフォルトにするシェルの実行 yum install virt-manager ※今回はvirt-installはインストールせず |
nmcli c add type bridge autoconnect yes con-name br0 ifname br0 nmcli c modify br0 ipv4.addresses 192.168.0.248/24 ipv4.method manual nmcli c modify br0 ipv4.gateway 192.168.0.1 nmcli c modify br0 ipv4.dns 192.168.0.240 nmcli c delete enp4s1 nmcli c add type bridge-slave autoconnect yes con-name enp4s1 ifname enp4s1 master br0 systemctl stop NetworkManager systemctl start NetworkManager |
ln -sf /usr/shre/seabios/bios.bin /usr/share/qemu-kvm/bios-256k.bin |
options kvm_intel nested=1 |
modprobe -r kvm_intel modprobe kvm_intel |
virsh edit kvmcentos7 「<cpu mode='custom' match='exact'>」を「<cpu mode='host-passthrough'>」に変更して保存します。 :wq! |
yum install ftp yum groupinstall "Virtualization Host" ※KVM関連パッケージのインストール yum install virt-manager ※今回はvirt-installはインストールせず lsmod|grep kvm ※kvm_intelとkvmという2行が表示されます |
nmcli c add type bridge autoconnect yes con-name br0 ifname br0 nmcli c modify br0 ipv4.addresses 192.168.0.249/24 ipv4.method manual nmcli c modify br0 ipv4.gateway 192.168.0.1 nmcli c modify br0 ipv4.dns 192.168.0.240 nmcli c delete ens3 nmcli c add type bridge-slave autoconnect yes con-name ens3 ifname ens3 master br0 systemctl stop NetworkManager systemctl start NetworkManager |
ln -sf /usr/shre/seabios/bios.bin /usr/share/qemu-kvm/bios-256k.bin |
virsh edit kvmsles11xs 「<cpu mode='custom' match='exact'>」を「<cpu mode='host-passthrough'>」に変更して保存します。 :wq! |
cp /var/lib/kvm/images/l2kvmsles11/disk0.raw /var/lib/kvm/images/l2kvmsles11/disk0kvm.raw |
mv /var/lib/kvm/images/l2kvmsles11/disk0.raw /var/lib/kvm/images/l2kvmsles11/disk0xen.raw mv /var/lib/kvm/images/l2kvmsles11/disk0kvm.raw /var/lib/kvm/images/l2kvmsles11/disk0.raw |
name="l2kvmsles11" description="None" uuid="a67662c5-4fd5-989b-720e-c84db6d56fd9" ※l2kvmsles11.xml内のuuidの値を使用 memory=4096 maxmem=4096 vcpus=2 on_poweroff="destroy" on_reboot="restart" on_crash="destroy" localtime=0 keymap="ja" builder="hvm" device_model="/usr/lib/xen/bin/qemu-dm" kernel="/usr/lib/xen/boot/hvmloader" boot="c" disk=[ 'file:/var/lib/kvm/images/l2kvmsles11/disk0xen.raw,hda,w', 'phy:/dev/sr0,hdc:cdrom,r', ] # vif=[ 'mac=52:54:00:2d:c4:49,bridge=br0,model=virtio', ] ※HVMドメインで動作しないモデルのためコメント化 vif=[ 'mac=52:54:00:2d:c4:49,bridge=br0,model=e1000', ] ※HVMドメインでで動作するモデルを指定(MACはl2kvmsles11.xml内の値) stdvga=0 vnc=1 vncunused=1 viridian=0 acpi=1 pae=1 hap=1 ※Nested Xen用の設定 nestedhvm=1 ※Nested Xen用の設定 serial="pty" |
xm create /etc/xen/vm/l2kvmsles11 |
Could not find /dev/hda2. Want me to fall back to /dev/hda2? (Y/n) ※Yを応答してもブート不可 |
cp /var/lib/xen/images/l2fvsles11kx/disk0.raw /var/lib/xen/images/l2fvsles11kx/disk0kvm.raw |
mv /var/lib/xen/images/l2fvsles11kx/disk0.raw /var/lib/xen/images/l2fvsles11kx/disk0xen.raw mv /var/lib/xen/images/l2fvsles11kx/disk0kvm.raw /var/lib/xen/images/l2fvsles11kx/disk0.raw |
disk=[ 'file:/var/lib/xen/images/l2fvsles11kx/disk0.raw,...]中の「disk0.raw」を「disk0xen.raw」に変更 # vif=[ 'mac=...,model=e1000,type=netfront', ] ※HVMドメインで動作しない指定のためコメント化 vif=[ 'mac=...,model=e1000', ] ※HVMドメインで動作するvif指定を追加 hap=1 ※Nested Xen用の設定追加 nestedhvm=1 ※Nested Xen用の設定追加 |
xm create /etc/xen/vm/l2fvsles11kx |
cp /etc/xen/vm/l2fvsles11kx /etc/xen/vm/l2fvsles11kx-kvm vi /etc/xen/vm/l2fvsles11kx-kvm disk=[ 'file:/var/lib/xen/images/l2fvsles11kx/disk0xen.raw,...]中の「disk0xen.raw」を「disk0.raw」に変更 ※hap=1 nestedhvm=1はそのまま残します。 |
xm create /etc/xen/vm/l2fvsles11kx-kvm |
Error launching manager: internal error: libxenlight state driver is not active |
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-6.noarch.rpm ※リリース番号は時期によって変化します yum update yum install lxc lxc-templates systemctl enable cgconfig.service reboot |
lxc-create -n lxccentos01 -t /usr/share/lxc/templates/lxc-centos [lxc-createコマンド実行表示の一部]
※rootユーザの暫定パスワードはRoot-lxccentos01-xxxxxxの形式になっています。 |
lxc-start -n lxccentos01 [lxc-startコマンド実行表示の一部]
lxccentos01 login: root Password: Root-lxccentos01-xxxxxx ※暫定パスワード You are required to change your password immediately (root enforced) Changing password for root. (current) UNIX password: Root-lxccentos01-xxxxxx ※暫定パスワード New password: 新しいパスワード Retype new password: 新しいパスワード [root@lxccentos01 ~]# |
# Template used to create this container: /usr/share/lxc/templates/lxc-centos # Parameters passed to the template: # For additional config options, please look at lxc.container.conf(5) lxc.network.type = veth lxc.network.flags = up lxc.network.link = virbr0 lxc.network.hwaddr = fe:3d:39:55:cc:0d lxc.rootfs = /var/lib/lxc/lxccentos01/rootfs ...以下省略... |
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes HOSTNAME= NM_CONTROLLED=no TYPE=Ethernet MTU= DHCP_HOSTNAME=`hostname` |
... centos7 dnsmasq-dhcp[2632]: DHCPREQUEST(virbr0) 192.168.122.209 fe:3d:39:55:cc:0d ... centos7 dnsmasq-dhcp[2632]: DHCPACK(virbr0) 192.168.122.209 fe:3d:39:55:cc:0d lxccentos01 |
(1)/etc/sysconfig/network-scripts/ifcfg-eth0の変更 vi /etc/sysconfig/network-scripts/ifcfg-eth0 [変更前] DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes HOSTNAME= NM_CONTROLLED=no TYPE=Ethernet MTU= DHCP_HOSTNAME=`hostname` [変更後] DEVICE=eth0 BOOTPROTO=none ONBOOT=yes HOSTNAME= NM_CONTROLLED=no TYPE=Ethernet MTU= DHCP_HOSTNAME=`hostname` IPADDR=CentOS 7コンテナの実IPアドレス ※追加行 PREFIX=24 GATEWAY=母艦と同じデフォルトゲートウェイアドレス ※追加行 DNS1=母艦と同じDNSサーバアドレス ※追加行 (2)CentOS 7コンテナの再起動 CentOS 7コンテナの再起動は「reboot」コマンドでOKです。 |
yum groupinstall "GNOME Desktop" |
xhost + ssh -Y root@lxccentos01 root@lxccentos01's password: パスワード指定 gnome-terminal & これで母艦側にCentOS 7コンテナ(lxccentos01)のGNOME端末(ウィンドウタイトル:「root@lxccentos01:~(lxccentos01.mydomain.net)」)が表示されます。 |
Lx | 仮想マシン名 | OS | 備考 |
---|---|---|---|
L0 | - (実機上のホスト名:esxi) | ESXi 6.0 | ESXi Hypervisor |
L1 | vscentos7xs | CentOS 7 | KVM Hypervisor |
L2 | l2kvmcentos7vs | CentOS 7 | KVM Hypervisor |
L3 | l3kvmcentos7vs | CentOS 7 | KVM Hypervisor |
vhv.enable = "TRUE" featMask.vm.hv.capable = "Min:1" |
yum groupinstall "Virtualization Host" yum install virt-manager 下記はNested KVM検証とは別目的のために実施しました。 yum install centos-release-xen yum update yum install xen grub-bootxen.shの実行 ※ Xenブートをデフォルトに設定するシェルの実行 |
nmcli c add type bridge autoconnect yes con-name br0 ifname br0 nmcli c modify br0 ipv4.addresses 192.168.0.248/24 ipv4.method manual nmcli c modify br0 ipv4.gateway 192.168.0.1 nmcli c modify br0 ipv4.dns 192.168.0.240 nmcli c delete eno16777736 nmcli c add type bridge-slave autoconnect yes con-name eno16777736 ifname eno16777736 master br0 systemctl stop NetworkManager systemctl start NetworkManager reboot ※ESXi上のvscentos7でブリッジを作成してip addrを実行すると「br0 ... state DOWN」と表示されます。 rebootするとip addrの実行で「br0 ... state UP」と表示されるようになります。 |
ln -sf /usr/shre/seabios/bios.bin /usr/share/qemu-kvm/bios-256k.bin |
Lx | 仮想マシン名 | OS | 備考 |
---|---|---|---|
L0 | - (実機上のホスト名:esxi) | ESXi 6.0 | ESXi Hypervisor |
L1 | vssles11xs | SLES 11 SP4 | Xen Hypervisor |
L2 | kvmcentos7xen | CentOS 7 | KVM Hypervisor |
L3 | l2kvmcentos7xen | CentOS 7 | - |
yum groupinstall "Virtualization Host" yum groupinstall virt-manager |
hap=1 nestedhvm=1 |
xm create /etc/xen/vm/kvmcentos7xen |